package cn.iocoder.yudao.module.system.tcpserver.pojo;

public interface NewProtocolConstant {
    short H1 = 0xEB;
    short H2 = 0x90;
    int HEAD = 0xEB90;
    short HEART = 0xB1;
    short DATA = 0xA1;//数据
    short DATA_BEGIN = 0xAA;//数据开始
    short DATA_END = 0xA4; //数据结束
    short DATA_ACK = 0xA5; //数据ACK

    short UPLOAD_BEGIN = 0xF4; //上行
    short DOWNLOAD_BEGIN = 0xF5;//下行
    byte REQ = 0x03;//请求
    byte ACK = 0x01;//响应

    byte DEVICE00 = 0x00; //岸基设备
    String DEVICE0NO = "3033"; //岸基设备
    byte DEVICE01 = 0x01;//海面设备1
    String DEVICE01NO = "3034";
    byte DEVICE02 = 0x02;//海面设备2
    String DEVICE02NO = "3035";

    interface LOCAL_TYPE {
        int ERROR = -99;

        //        int HEART_LENGTH = 11;//请求上行长度
//        int UPLOAD_REQ_ACK_LENGTH = ;//请求上行长度
        int UPLOAD_REQ_ACK = -1; //请求ACK
        int UPLOAD_DATA_BEGIN= -2; //传输开始
        int UPLOAD_DATA= -3; //传输的数据
        int UPLOAD_END= -4; //传输结束

        int DOWNLOAD_REQ = -11;//海面请求下行
        int DOWNLOAD_DATA_BEGIN = -12;//下行数据
        int DOWNLOAD_DATA = -13;//下行数据
        int DOWNLOAD_END_ACK = -14;//海面请求下行结束响应

        int DOWNLOAD_REQ_ACK = -15;//海面请求下行

    }

    //请求上行指令
    byte[] UPLOAD_REQ = new byte[]{
            (byte) 0xEB, (byte) 0x90,  // 帧头
            0x00, 0x08,               // 数据长度
            (byte) 0xF4,               // 指令类型
            0x03,                     // 类型
            0x1E, 0x50,
    };
    byte[] UPLOAD_DATA_ACK = {
            (byte) 0xEB, (byte) 0x90, (byte) 0x00, (byte) 0x0C,
            (byte) 0x00, (byte) 0xA5, (byte) 0x00, (byte) 0x00,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
    };

    byte[] UPLOAD_DATA_END_ACK = {
            (byte) 0xEB, (byte) 0x90, (byte) 0x00, (byte) 0x0C,
            (byte) 0x00, (byte) 0xA5, (byte) 0xFF, (byte) 0xFF,
            (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
    };

    byte[] UPLOAD_RESP = new byte[]{
            (byte) 0xEB, (byte) 0x90,  // 帧头
            0x00, 0x0B,               // 数据长度(0x000B = 11字节)
            (byte) 0xF4,               // 指令类型
            0x01,                     // 类型(应答)
            (byte) 0xAA,                     // 数传开始
            0x00,                // 数据包数量
            0x00,               // 数据包数量
            0x00, 0x00                // 校验
    };

    // 请求下行数据指令 (数据包数量设为0，校验位先设为0)
    byte[] DOWNLOAD_REQ = {
            (byte) 0xEB, (byte) 0x90,  // 帧头
            0x00, 0x0A,               // 数据长度(0x000A = 10字节)
            (byte) 0xF5,               // 指令类型
            0x03,                     // 类型(请求)
            0x00, 0x00,               // 数据包数量(设为0)
            0x00, 0x00                // 校验位(先设为0，实际需计算)
    };

    // 卫通应答请求下行数据指令 (包含数传状态0xAA)
    byte[] DOWNLOAD_REQ_ACK = {
            (byte) 0xEB, (byte) 0x90,  // 帧头
            0x00, 0x09,               // 数据长度(0x0002 = 2字节)
            (byte) 0xF5,               // 指令类型
            0x01,                     // 类型(应答)
            (byte) 0xAA,               // 数传状态(0xAA表示数传开始)
            // 校验位需要通过CRC计算，这里先设为0
            0x1F, (byte) 0xCF
    };


    byte[] DOWNLOAD_BEGIN_DATA = {
            (byte) 0xEB, (byte) 0x90,  // 帧头
            0x00, 0x0c,               // 数据长度
            (byte) 0x00,               // 源地址 00
            (byte) 0xA1,                     // 数传
            (byte) 0x00,  (byte) 0x00,    // 序列号 0
            (byte) 0x00,  (byte) 0x00, //数据长度
            // 校验位需要通过CRC计算，这里先设为0
            (byte) 0x00, (byte) 0x00
    };
    byte[] DOWNLOAD_END = {
            (byte) 0xEB, (byte) 0x90,  // 帧头
            0x00, 0x0c,               // 数据长度
            (byte) 0x00,               // 源地址 00
            (byte) 0xA4,                     // 数传结束
            (byte) 0xFF,  (byte) 0xFF,    // 序列号 FFFF
            (byte) 0x00,  (byte) 0x00, //数据长度
            // 校验位需要通过CRC计算，这里先设为0
            (byte) 0x00, (byte) 0x00
    };

}
